/*
 * Copyright 2016-2017 TVI Go Easy.
 * Created on 2017/6/11 21:15
 */
package com.gitee.mechanic.web.utils;

import com.gitee.mechanic.core.enums.HttpCode;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.ModelMap;

/**
 * 控制器全局返回信息工具类
 *
 * @author mechanic
 * @version 0.0.1
 */
public class ResponseUtils {
    /**
     * 设置无返回数据成功响应信息
     *
     * @return 无返回数据成功响应信息
     */
    public static ResponseEntity<ModelMap> result() {
        return result(HttpCode.OK);
    }

    /**
     * 设置带有返回数据的成功响应信息
     *
     * @param data 返回数据
     * @return 带有返回数据的成功响应信息
     */
    public static ResponseEntity<ModelMap> result(Object data) {
        return result(HttpCode.OK, null, data);
    }

    /**
     * 设置无返回数据的响应信息
     *
     * @param code 响应代码
     * @return 无返回数据的响应信息
     */
    public static ResponseEntity<ModelMap> result(HttpCode code) {
        return result(code, null, null);
    }

    /**
     * 设置无返回数据的响应信息
     *
     * @param code    响应代码
     * @param message 响应消息
     * @return 无返回数据的响应信息
     */
    public static ResponseEntity<ModelMap> result(HttpCode code, String message) {
        return result(code, message, null);
    }

    /**
     * 设置带有状态码和数据的响应信息
     *
     * @param code 响应代码
     * @param data 返回客户端的数据
     * @return 带有状态码和数据的响应信息
     */
    public static ResponseEntity<ModelMap> result(HttpCode code, Object data) {
        return result(code, null, data);
    }

    /**
     * 设置带有返回数据的响应信息
     *
     * @param code    响应代码
     * @param message 响应消息
     * @param data    返回客户端的数据
     * @return 带有数据的响应信息
     */
    public static ResponseEntity<ModelMap> result(HttpCode code, String message, Object data) {
        ModelMap map = new ModelMap();
        if (data != null) {
            map.put("data", data);
        } else {
            map.put("data", "[]");
        }
        message = StringUtils.isNotBlank(message) ? message : code.getMessage();
        map.put("status", code.getCode());
        map.put("message", message);
        map.put("timestamp", System.currentTimeMillis());
        return ResponseEntity.ok(map);
    }
}
